// 预解析：提前对变量进行解析，把变量的声明放在程序的最顶端，避免变量没有声明报错
// var function 存在预解析
var n
{
  console.log(n) // undefined
  n = 10
  console.log(n) // 10
}

let rt = fn(1, 2)
console.log(fn) // ƒ fn(a, b) {  return a + b }
console.log(rt) // 3
function fn(a, b) {
  return a + b
}

// let const 声明变量时有一个作用域死区:TDZ，没有预解析
{
  // console.log(m) // Cannot access 'm' before initialization
  let m = 20
  console.log(m)
}
